home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / DBVGAL17.ARJ / SRC_ASM.ARJ / PALETTE.ASM < prev    next >
Assembly Source File  |  1992-01-25  |  3KB  |  69 lines

  1.  
  2. ;************************************************************************
  3. ;*                                                                      *
  4. ;* File:        PALETTE.ASM - Load palette registers                    *
  5. ;* Routine:     _Load_Palette                                           *
  6. ;* Arguments:   Start, Count, ArrayPtr                                  *
  7. ;*                                                                      *
  8. ;************************************************************************
  9.  
  10.         PUBLIC  _Load_Palette
  11.  
  12. PAL_TEXT   SEGMENT BYTE PUBLIC 'CODE'
  13.  
  14. Arg_Start       EQU     WORD PTR  [BP+6]
  15. Arg_Count       EQU     WORD PTR  [BP+8]
  16. Arg_ArrayPtr    EQU     DWORD PTR [BP+0ah]
  17.         ASSUME  CS:PAL_TEXT
  18. _Load_Palette   PROC far
  19.         PUSH    BP                      ;Preserve BP
  20.         MOV     BP,SP                   ;Preserve stack pointer
  21.  
  22.         PUSH    ES                      ;Preserve segment and index registers
  23.         PUSH    DS
  24.         PUSH    DI
  25.         PUSH    SI
  26.  
  27.         ; Get address of input status registers
  28.  
  29.         XOR     AX,AX                   ;Segment of BIOS data area
  30.         MOV     ES,AX
  31.         MOV     DX,ES:[463h]            ;Fetch address of CRTC
  32.         ADD     DX,6                    ;Compute address of input status reg
  33.  
  34.         ; Load palette registers
  35.  
  36.         IN      AL,DX                   ;Reset data/address flip/flop
  37.         MOV     DX,3C0h                 ;Fetch address of Attribute Controller
  38.         LDS     SI,Arg_ArrayPtr         ;Fetch pointer to palette values
  39.         MOV     AX,Arg_Start            ;Index of first palette register
  40.         MOV     CX,Arg_Count            ;Number of registers to load
  41.  
  42. Palette_Loop:
  43.         OUT     DX,AL                   ;Select next register
  44.         XCHG    AH,AL                   ;Save register index
  45.         LODSB                           ;Fetch next register value
  46.         OUT     DX,AL                   ;Set next palette register
  47.         XCHG    AH,AL                   ;Restore register index
  48.         INC     AL                      ;Advance register index
  49.         LOOP    Palette_Loop            ;Check if all done
  50.  
  51.         MOV     AL,20h                  ;Turn Attribute controller on
  52.         OUT     DX,AL
  53.  
  54.         ; Cleanup and return
  55.  
  56.         POP     SI                      ;Restore segment and index registers
  57.         POP     DI
  58.         POP     DS
  59.         POP     ES
  60.  
  61.         MOV     SP,BP                   ;Restore stack pointer
  62.         POP     BP                      ;Restore BP
  63.         RET
  64. _Load_Palette   ENDP
  65.  
  66. PAL_TEXT   ENDS
  67.         END
  68.  
  69.